package com.zjw.demo.vertx.starter.plugin.impl.aop;

import java.lang.annotation.*;

/**
 * @see EnableAop
 *
 * <p>
 * <p>
 * 若注解到方法上，只对单个方法AOP；
 * 若注解到类上，对所有方法进行AOP;
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Invoke {

  /**
   * 类似 com.zjw.demo.vertx.starter.template.aop.Login#logDebug
   * 我们会通过#去获取指定类的指定方法，注意，这个方法必须是静态方法，且c参数类型为Object[].class，若不是此类型，抛出异常；
   * <p>
   * 关于回调：
   * Object[0]固定为类名
   * Object[1]固定为方法名
   * 其它为方法原参数
   * 也就是Object.length >= 2;
   */
  String before() default "";


  /**
   * 关于回调：
   * Object[0]固定为类名
   * Object[1]固定为方法名
   * Object[2]固定为方法返回值，若没有则null
   * 其它为方法原参数
   * 也就是Object.length >= 3;
   */
  String after() default "";
}
